package condominios.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;

import condominios.excepcion.DAOExcepcion;
import condominios.util.ConexionBD;
import condominios.util.utilitario;
import condominios.modelo.Persona;
import condominios.modelo.Visita;

public class VisitaDAO extends BaseDAO {
	
	public Collection<Visita> buscarPorResidente(String Residente) throws DAOExcepcion {

		System.out.println("VisitaDAO: buscarPorResidente(Integer idResidente)");

		String query = "SELECT a.idVisita, a.idPersona, a.numDocumento, a.nombre, a.apellidoPaterno, a.apellidoMaterno, a.fechaHora, a.estado, a.fechaCreo, a.idPersonaCreo, a.fechaModifico, a.idPersonaModifico, a.estadoRegistro, b.numDocumento AS numDocumentoR, b.nombre AS nombreR, b.apellidoPaterno AS apellidoPaternoR, b.apellidoMaterno AS apellidoMaternoR"
				+ " FROM visita a INNER JOIN persona b ON b.idPersona= a.idPersona and concat_ws(' ', b.nombre, b.apellidoPaterno, b.apellidoMaterno) like ?"
				+ " where a.estado=1 and a.estadoRegistro=1 order by a.fechaHora desc";
		
		Collection<Visita> lista = new ArrayList<Visita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, "%"+ Residente +"%");
			
			rs = stmt.executeQuery();
			
			while (rs.next()) {

				Persona residente= new Persona();
				residente.setIdPersona(rs.getInt("idPersona"));
				residente.setDni(rs.getString("numDocumentoR"));
				residente.setNombres(rs.getString("nombreR"));
				residente.setApellidoPaterno(rs.getString("apellidoPaternoR"));
				residente.setApellidoMaterno(rs.getString("apellidoMaternoR"));

				Visita item = new Visita();
				item.setIdVisita(rs.getInt("IdVisita"));
				item.setPersona(residente);
				item.setNumDocumento(rs.getString("NumDocumento"));
				item.setNombre(rs.getString("Nombre"));
				item.setApellidoPaterno(rs.getString("apellidoPaterno"));
				item.setApellidoMaterno(rs.getString("apellidoMaterno"));
				
				//item.setFechaHora(rs.getDate("fechaHora"));
				item.setFechaHora(rs.getTimestamp("fechaHora"));
				
				lista.add(item);				
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return lista;
	}

	public void insertar(Visita vo) throws DAOExcepcion {
		System.out.println("VisitaDAO: insertar(Visita vo)");
		String query = "INSERT INTO visita (idPersona, numDocumento, nombre, apellidoPaterno, apellidoMaterno, fechaHora, estado, fechaCreo, idPersonaCreo, estadoRegistro)VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setInt(1, vo.getIdPersona());
			stmt.setString(2, vo.getNumDocumento());
			stmt.setString(3, vo.getNombre());
			stmt.setString(4, vo.getApellidoPaterno());
			stmt.setString(5, vo.getApellidoMaterno());
			stmt.setString(6, utilitario.fnFechaHoraMySql(vo.getFechaHora()));
			stmt.setBoolean(7, vo.isEstado() );
			stmt.setString(8, utilitario.fnFechaHoraMySql(vo.getFechaCreo()));
			stmt.setInt(9, vo.getIdPersonaCreo());
			stmt.setBoolean(10, vo.isEstadoRegistro());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

}
